#include <string>
#include <iostream>
#include <cstring>
#include <gmp.h>
#include <gmpxx.h>
#include <time.h>
// #include "json.hpp"
// #include "utils.h"
#include "vdsse.h"

using namespace std;

int main() {
    using namespace nlohmann;
    string clientPath = "client.json";
    string serverPath = "vdsse_server.json";
    json clientJson;
    std::ifstream i(clientPath);
    i >> clientJson;
    
    // VDSSE_Setup(256, clientJson);
    Initialization(clientJson);

    // PPrf &p = Singleton<PPrf>::Instance();
    // cout << &p << endl;
    // ifstream i(clientPath);
    // nlohmann::json clientJson;
    // i >> clientJson;
    ST serchTable;
    BuildST(clientJson, serchTable);

    // Initialization("file.json", "vdsse.json");


    
    // mpz_class key("e242eb4e42805aeaa20717ae19c3192bcd466e9a6c23a4ae61256266e2900899", 16);
    // string data = "helloworld!";
    // string c_data = SKE_Enc(key, data);
    // cout << c_data << endl;
    // string m_data = SKE_Dec(key, "e7ba5cedc36ce946ff2bc4");
    // cout << m_data << endl;

    
    // gmp_randstate_t grt;
    // gmp_randinit_default(grt); //设置随机数生成算法为默认
    // gmp_randseed_ui(grt, time(NULL));	//设置随机化种子为当前时间，这几条语句的作用相当于标准C中的srand(time(NULL));
    // for (int i = 0; i < 3; i++) {
    //     mpz_t key;
    //     mpz_init(key);
    //     mpz_urandomb(key, grt, 256);
    //     mpz_class k(key);
    //     // mpz_class k("104299165932775339984468081892758417951784531394708199928919851233373022827516");
    //     cout << k.get_str(16) << endl;
    // }
     
    // PRF f(k, 128);
    // char data[12] = "helloworld";
    // char result[200];
    // bzero(result, 200);
    // f(data, 12, result);
    // cout << hex2string(result, 128) << endl;

}